home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / kerberos / pc / krb_src.lha / INCLUDE / KRB.H < prev    next >
Encoding:
C/C++ Source or Header  |  1991-08-08  |  15.2 KB  |  445 lines

  1. /*
  2.  * $Source: /mit/kerberos/src/include/RCS/krb.h,v $
  3.  * $Author: jtkohl $
  4.  * $Header: /mit/kerberos/src/include/RCS/krb.h,v 4.26 89/08/08 17:55:25 jtkohl Exp $
  5.  *
  6.  * Copyright 1987, 1988 by the Massachusetts Institute of Technology.
  7.  *
  8.  * For copying and distribution information, please see the file
  9.  * <mit-copyright.h>.
  10.  *
  11.  * Include file for the Kerberos library.
  12.  */
  13.  
  14. /* Only one time, please */
  15. #ifndef    KRB_DEFS
  16. #define KRB_DEFS
  17.  
  18. #include <mit_copy.h>
  19. #include <conf.h>
  20.  
  21. /* Need some defs from des.h     */
  22. #include <des.h>
  23.  
  24. /* Text describing error codes */
  25. #define        MAX_KRB_ERRORS    256
  26. extern char *krb_err_txt[MAX_KRB_ERRORS];
  27.  
  28. /* These are not defined for at least SunOS 3.3 and Ultrix 2.2 */
  29. #if defined(ULTRIX022) || (defined(SunOS) && SunOS < 40)
  30. #define FD_ZERO(p)  ((p)->fds_bits[0] = 0)
  31. #define FD_SET(n, p)   ((p)->fds_bits[0] |= (1 << (n)))
  32. #define FD_ISSET(n, p)   ((p)->fds_bits[0] & (1 << (n)))
  33. #endif /* ULTRIX022 || SunOS */
  34.  
  35. /* General definitions */
  36. #define        KSUCCESS    0
  37. #define        KFAILURE    255
  38.  
  39. #ifdef NO_UIDGID_T
  40. typedef unsigned short uid_t;
  41. typedef unsigned short gid_t;
  42. #endif /* NO_UIDGID_T */
  43.  
  44. /*
  45.  * Kerberos specific definitions 
  46.  *
  47.  * KRBLOG is the log file for the kerberos master server. KRB_CONF is
  48.  * the configuration file where different host machines running master
  49.  * and slave servers can be found. KRB_MASTER is the name of the
  50.  * machine with the master database.  The admin_server runs on this
  51.  * machine, and all changes to the db (as opposed to read-only
  52.  * requests, which can go to slaves) must go to it. KRB_HOST is the
  53.  * default machine * when looking for a kerberos slave server.  Other
  54.  * possibilities are * in the KRB_CONF file. KRB_REALM is the name of
  55.  * the realm. 
  56.  */
  57.  
  58. #ifdef notdef
  59. this is server - only, does not belong here;
  60. #define     KRBLOG         "/kerberos/kerberos.log"
  61. are these used anyplace '?';
  62. #define        VX_KRB_HSTFILE    "/etc/krbhst"
  63. #define        PC_KRB_HSTFILE    "\\kerberos\\krbhst"
  64. #endif
  65. #ifdef IBMPC
  66. #define        KRB_CONF     "\\kerb\\krb.conf"
  67. #else
  68. #define        KRB_CONF    "/etc/krb.conf"
  69. #endif
  70. #define        KRB_RLM_TRANS    "/etc/krb.realms"
  71. #define        KRB_MASTER    "po.cis.brown.edu"
  72. #define        KRB_REALM    "CIS.BROWN.EDU"
  73. #define        KRB_HOST     KRB_MASTER
  74.  
  75. /* The maximum sizes for aname, realm, sname, and instance +1 */
  76. #define     ANAME_SZ    40
  77. #define        REALM_SZ    40
  78. #define        SNAME_SZ    40
  79. #define        INST_SZ        40
  80. /* include space for '.' and '@' */
  81. #define        MAX_K_NAME_SZ    (ANAME_SZ + INST_SZ + REALM_SZ + 2)
  82. #define        KKEY_SZ        100
  83. #define        VERSION_SZ    1
  84. #define        MSG_TYPE_SZ    1
  85. #define        DATE_SZ        26    /* RTI date output */
  86.  
  87. #define        MAX_HSTNM    100
  88.  
  89. #ifndef DEFAULT_TKT_LIFE        /* allow compile-time override */
  90. #define        DEFAULT_TKT_LIFE    96 /* default lifetime for krb_mk_req
  91.                           & co., 8 hrs */
  92. #endif
  93.  
  94. /* Definition of text structure used to pass text around */
  95. #define        MAX_KTXT_LEN    1250
  96.  
  97. struct ktext {
  98.     int     length;        /* Length of the text */
  99.     unsigned char dat[MAX_KTXT_LEN];    /* The data itself */
  100.     unsigned long mbz;        /* zero to catch runaway strings */
  101. };
  102.  
  103. typedef struct ktext *KTEXT;
  104. typedef struct ktext far *KTEXT_FP;
  105. typedef struct ktext KTEXT_ST;
  106.  
  107.  
  108. /* Definitions for send_to_kdc */
  109. #define    CLIENT_KRB_TIMEOUT    4    /* time between retries */
  110. #define CLIENT_KRB_RETRY    5    /* retry this many times */
  111. #define    CLIENT_KRB_BUFLEN    512    /* max unfragmented packet */
  112.  
  113. /* Definitions for ticket file utilities */
  114. #define    R_TKT_FIL    0
  115. #define    W_TKT_FIL    1
  116.  
  117. /* Definitions for cl_get_tgt */
  118. #ifdef PC
  119. #define CL_GTGT_INIT_FILE        "\\kerberos\\k_in_tkts"
  120. #else
  121. #define CL_GTGT_INIT_FILE        "/etc/k_in_tkts"
  122. #endif /* PC */
  123.  
  124. /* Parameters for rd_ap_req */
  125. /* Maximum alloable clock skew in seconds */
  126. #define     CLOCK_SKEW    5*60
  127. /* Filename for readservkey */
  128. #define        KEYFILE        "/etc/srvtab"
  129.  
  130. /* Structure definition for rd_ap_req */
  131.  
  132. struct auth_dat {
  133.     unsigned char k_flags;    /* Flags from ticket */
  134.     char    pname[ANAME_SZ];    /* Principal's name */
  135.     char    pinst[INST_SZ];    /* His Instance */
  136.     char    prealm[REALM_SZ];    /* His Realm */
  137.     unsigned long checksum;    /* Data checksum (opt) */
  138.     C_Block session;        /* Session Key */
  139.     int     life;        /* Life of ticket */
  140.     unsigned long time_sec;    /* Time ticket issued */
  141.     unsigned long address;    /* Address in ticket */
  142.     KTEXT_ST reply;        /* Auth reply (opt) */
  143. };
  144.  
  145. typedef struct auth_dat AUTH_DAT;
  146.  
  147. /* Structure definition for credentials returned by get_cred */
  148.  
  149. struct credentials {
  150.     char    service[ANAME_SZ];    /* Service name */
  151.     char    instance[INST_SZ];    /* Instance */
  152.     char    realm[REALM_SZ];    /* Auth domain */
  153.     C_Block session;        /* Session key */
  154.     int     lifetime;        /* Lifetime */
  155.     int     kvno;        /* Key version number */
  156.     KTEXT_ST ticket_st;        /* The ticket itself */
  157.     long    issue_date;        /* The issue time */
  158.     char    pname[ANAME_SZ];    /* Principal's name */
  159.     char    pinst[INST_SZ];    /* Principal's instance */
  160. };
  161.  
  162. typedef struct credentials CREDENTIALS;
  163.  
  164. /* Structure definition for rd_private_msg and rd_safe_msg */
  165.  
  166. struct msg_dat {
  167.     unsigned char far *app_data;    /* pointer to appl data */
  168.     unsigned long app_length;    /* length of appl data */
  169.     unsigned long hash;        /* hash to lookup replay */
  170.     int     swap;        /* swap bytes? */
  171.     long    time_sec;        /* msg timestamp seconds */
  172.     unsigned char time_5ms;    /* msg timestamp 5ms units */
  173. };
  174.  
  175. typedef struct msg_dat MSG_DAT;
  176.  
  177.  
  178. /* Location of ticket file for save_cred and get_cred */
  179. #ifdef IBMPC
  180. #define TKT_FILE ""
  181. #define TKT_ENV            "KERBEROS_TICKETS"
  182. typedef struct {
  183.     unsigned buf_size;
  184.     unsigned dummy;
  185.     unsigned eof_ptr;
  186.     int sema;        /* semaphore 0 - OK, -1 - lock write, +ve lock read */
  187. } tkt_header;
  188. tkt_header far *tkt_ptr(void);
  189. #else
  190. #define TKT_FILE        tkt_string()
  191. #define TKT_ROOT        "/tmp/tkt"
  192. #endif /* PC */
  193.  
  194. /* Error codes returned from the KDC */
  195. #define        KDC_OK        0    /* Request OK */
  196. #define        KDC_NAME_EXP    1    /* Principal expired */
  197. #define        KDC_SERVICE_EXP    2    /* Service expired */
  198. #define        KDC_AUTH_EXP    3    /* Auth expired */
  199. #define        KDC_PKT_VER    4    /* Protocol version unknown */
  200. #define        KDC_P_MKEY_VER    5    /* Wrong master key version */
  201. #define        KDC_S_MKEY_VER     6    /* Wrong master key version */
  202. #define        KDC_BYTE_ORDER    7    /* Byte order unknown */
  203. #define        KDC_PR_UNKNOWN    8    /* Principal unknown */
  204. #define        KDC_PR_N_UNIQUE 9    /* Principal not unique */
  205. #define        KDC_NULL_KEY   10    /* Principal has null key */
  206. #define        KDC_GEN_ERR    20    /* Generic error from KDC */
  207.  
  208.  
  209. /* Values returned by get_credentials */
  210. #define        GC_OK        0    /* Retrieve OK */
  211. #define        RET_OK        0    /* Retrieve OK */
  212. #define        GC_TKFIL       21    /* Can't read ticket file */
  213. #define        RET_TKFIL      21    /* Can't read ticket file */
  214. #define        GC_NOTKT       22    /* Can't find ticket or TGT */
  215. #define        RET_NOTKT      22    /* Can't find ticket or TGT */
  216.  
  217.  
  218. /* Values returned by mk_ap_req     */
  219. #define        MK_AP_OK    0    /* Success */
  220. #define        MK_AP_TGTEXP   26    /* TGT Expired */
  221.  
  222. /* Values returned by rd_ap_req */
  223. #define        RD_AP_OK    0    /* Request authentic */
  224. #define        RD_AP_UNDEC    31    /* Can't decode authenticator */
  225. #define        RD_AP_EXP      32    /* Ticket expired */
  226. #define        RD_AP_NYV      33    /* Ticket not yet valid */
  227. #define        RD_AP_REPEAT   34    /* Repeated request */
  228. #define        RD_AP_NOT_US   35    /* The ticket isn't for us */
  229. #define        RD_AP_INCON    36    /* Request is inconsistent */
  230. #define        RD_AP_TIME     37    /* delta_t too big */
  231. #define        RD_AP_BADD     38    /* Incorrect net address */
  232. #define        RD_AP_VERSION  39    /* protocol version mismatch */
  233. #define        RD_AP_MSG_TYPE 40    /* invalid msg type */
  234. #define        RD_AP_MODIFIED 41    /* message stream modified */
  235. #define        RD_AP_ORDER    42    /* message out of order */
  236. #define        RD_AP_UNAUTHOR 43    /* unauthorized request */
  237.  
  238. /* Values returned by get_pw_tkt */
  239. #define        GT_PW_OK    0    /* Got password changing tkt */
  240. #define        GT_PW_NULL     51    /* Current PW is null */
  241. #define        GT_PW_BADPW    52    /* Incorrect current password */
  242. #define        GT_PW_PROT     53    /* Protocol Error */
  243. #define        GT_PW_KDCERR   54    /* Error returned by KDC */
  244. #define        GT_PW_NULLTKT  55    /* Null tkt returned by KDC */
  245.  
  246.  
  247. /* Values returned by send_to_kdc */
  248. #define        SKDC_OK        0    /* Response received */
  249. #define        SKDC_RETRY     56    /* Retry count exceeded */
  250. #define        SKDC_CANT      57    /* Can't send request */
  251.  
  252. /*
  253.  * Values returned by get_intkt
  254.  * (can also return SKDC_* and KDC errors)
  255.  */
  256.  
  257. #define        INTK_OK        0    /* Ticket obtained */
  258. #define        INTK_W_NOTALL  61    /* Not ALL tickets returned */
  259. #define        INTK_BADPW     62    /* Incorrect password */
  260. #define        INTK_PROT      63    /* Protocol Error */
  261. #define        INTK_ERR       70    /* Other error */
  262.  
  263. /* Values returned by get_adtkt */
  264. #define         AD_OK           0    /* Ticket Obtained */
  265. #define         AD_NOTGT       71    /* Don't have tgt */
  266.  
  267. /* Error codes returned by ticket file utilities */
  268. #define        NO_TKT_FIL    76    /* No ticket file found */
  269. #define        TKT_FIL_ACC    77    /* Couldn't access tkt file */
  270. #define        TKT_FIL_LCK    78    /* Couldn't lock ticket file */
  271. #define        TKT_FIL_FMT    79    /* Bad ticket file format */
  272. #define        TKT_FIL_INI    80    /* tf_init not called first */
  273.  
  274. /* Error code returned by kparse_name */
  275. #define        KNAME_FMT    81    /* Bad Kerberos name format */
  276.  
  277. /* Error code returned by krb_mk_safe */
  278. #define        SAFE_PRIV_ERROR    -1    /* syscall error */
  279.  
  280. /*
  281.  * macros for byte swapping; also scratch space
  282.  * u_quad  0-->7, 1-->6, 2-->5, 3-->4, 4-->3, 5-->2, 6-->1, 7-->0
  283.  * u_long  0-->3, 1-->2, 2-->1, 3-->0
  284.  * u_short 0-->1, 1-->0
  285.  */
  286.  
  287. #define     swap_u_16(x) {\
  288.  unsigned long   _krb_swap_tmp[4];\
  289.  swab(((char *) x) +0, ((char *)  _krb_swap_tmp) +14 ,2); \
  290.  swab(((char *) x) +2, ((char *)  _krb_swap_tmp) +12 ,2); \
  291.  swab(((char *) x) +4, ((char *)  _krb_swap_tmp) +10 ,2); \
  292.  swab(((char *) x) +6, ((char *)  _krb_swap_tmp) +8  ,2); \
  293.  swab(((char *) x) +8, ((char *)  _krb_swap_tmp) +6 ,2); \
  294.  swab(((char *) x) +10,((char *)  _krb_swap_tmp) +4 ,2); \
  295.  swab(((char *) x) +12,((char *)  _krb_swap_tmp) +2 ,2); \
  296.  swab(((char *) x) +14,((char *)  _krb_swap_tmp) +0 ,2); \
  297.  bcopy((char *)_krb_swap_tmp,(char *)x,16);\
  298.                             }
  299.  
  300. #define     swap_u_12(x) {\
  301.  unsigned long   _krb_swap_tmp[4];\
  302.  swab(( char *) x,     ((char *)  _krb_swap_tmp) +10 ,2); \
  303.  swab(((char *) x) +2, ((char *)  _krb_swap_tmp) +8 ,2); \
  304.  swab(((char *) x) +4, ((char *)  _krb_swap_tmp) +6 ,2); \
  305.  swab(((char *) x) +6, ((char *)  _krb_swap_tmp) +4 ,2); \
  306.  swab(((char *) x) +8, ((char *)  _krb_swap_tmp) +2 ,2); \
  307.  swab(((char *) x) +10,((char *)  _krb_swap_tmp) +0 ,2); \
  308.  bcopy((char *)_krb_swap_tmp,(char *)x,12);\
  309.                             }
  310.  
  311. #define     swap_C_Block(x) {\
  312.  unsigned long   _krb_swap_tmp[4];\
  313.  swab(( char *) x,    ((char *)  _krb_swap_tmp) +6 ,2); \
  314.  swab(((char *) x) +2,((char *)  _krb_swap_tmp) +4 ,2); \
  315.  swab(((char *) x) +4,((char *)  _krb_swap_tmp) +2 ,2); \
  316.  swab(((char *) x) +6,((char *)  _krb_swap_tmp)    ,2); \
  317.  bcopy((char *)_krb_swap_tmp,(char *)x,8);\
  318.                             }
  319. #define     swap_u_quad(x) {\
  320.  unsigned long   _krb_swap_tmp[4];\
  321.  swab(( char *) &x,    ((char *)  _krb_swap_tmp) +6 ,2); \
  322.  swab(((char *) &x) +2,((char *)  _krb_swap_tmp) +4 ,2); \
  323.  swab(((char *) &x) +4,((char *)  _krb_swap_tmp) +2 ,2); \
  324.  swab(((char *) &x) +6,((char *)  _krb_swap_tmp)    ,2); \
  325.  bcopy((char *)_krb_swap_tmp,(char *)&x,8);\
  326.                             }
  327.  
  328. #define     swap_u_long(x) {\
  329.  unsigned long   _krb_swap_tmp[4];\
  330.  swab((char *)  &x,    ((char *)  _krb_swap_tmp) +2 ,2); \
  331.  swab(((char *) &x) +2,((char *)  _krb_swap_tmp),2); \
  332.  x = _krb_swap_tmp[0];   \
  333.                            }
  334.  
  335. #define     swap_u_short(x) {\
  336.  unsigned short    _krb_swap_sh_tmp; \
  337.  swab((char *)  &x,    ( &_krb_swap_sh_tmp) ,2); \
  338.  x = (unsigned short) _krb_swap_sh_tmp; \
  339.                             }
  340.  
  341. /* Kerberos ticket flag field bit definitions */
  342. #define K_FLAG_ORDER    0       /* bit 0 --> lsb */
  343. #define K_FLAG_1                /* reserved */
  344. #define K_FLAG_2                /* reserved */
  345. #define K_FLAG_3                /* reserved */
  346. #define K_FLAG_4                /* reserved */
  347. #define K_FLAG_5                /* reserved */
  348. #define K_FLAG_6                /* reserved */
  349. #define K_FLAG_7                /* reserved, bit 7 --> msb */
  350.  
  351. #ifndef PC
  352. char *tkt_string();
  353. #endif    /* PC */
  354.  
  355. #ifdef    OLDNAMES
  356. #define krb_mk_req    mk_ap_req
  357. #define krb_rd_req    rd_ap_req
  358. #define krb_kntoln    an_to_ln
  359. #define krb_set_key    set_serv_key
  360. #define krb_get_cred    get_credentials
  361. #define krb_mk_priv    mk_private_msg
  362. #define krb_rd_priv    rd_private_msg
  363. #define krb_mk_safe    mk_safe_msg
  364. #define krb_rd_safe    rd_safe_msg
  365. #define krb_mk_err    mk_appl_err_msg
  366. #define krb_rd_err    rd_appl_err_msg
  367. #define krb_ck_repl    check_replay
  368. #define    krb_get_pw_in_tkt    get_in_tkt
  369. #define krb_get_svc_in_tkt    get_svc_in_tkt
  370. #define krb_get_pw_tkt        get_pw_tkt
  371. #define krb_realmofhost        krb_getrealm
  372. #define krb_get_phost        get_phost
  373. #define krb_get_krbhst        get_krbhst
  374. #define krb_get_lrealm        get_krbrlm
  375. #endif    /* OLDNAMES */
  376.  
  377. /* Defines for krb_sendauth and krb_recvauth */
  378.  
  379. #define    KOPT_DONT_MK_REQ 0x00000001 /* don't call krb_mk_req */
  380. #define    KOPT_DO_MUTUAL   0x00000002 /* do mutual auth */
  381.  
  382. #define    KOPT_DONT_CANON  0x00000004 /*
  383.                      * don't canonicalize inst as
  384.                      * a hostname
  385.                      */
  386.  
  387. #define    KRB_SENDAUTH_VLEN 8        /* length for version strings */
  388.  
  389. #ifdef ATHENA_COMPAT
  390. #define    KOPT_DO_OLDSTYLE 0x00000008 /* use the old-style protocol */
  391. #endif /* ATHENA_COMPAT */
  392.  
  393. #ifdef WINDOWS
  394. /*    Windows prototypes */
  395. int far krb_sendauth(long,int,KTEXT_FP,char far*,char far*,char far*,u_long,
  396.                 MSG_DAT far*,CREDENTIALS far*,Key_schedule far*,
  397.                 struct sockaddr_in far*,struct sockaddr_in far*,char far*);
  398. char far* far* far get_krb_err_txt(void);
  399. void far set_krb_debug(int);
  400. void far set_ap_req_debug(int);
  401. #ifdef __cplusplus
  402. int printf(char far*,...);
  403. #else
  404. int printf();
  405. #endif
  406. int far kname_parse(char far*,char far*,char far*,char far*);
  407. int far krb_get_pw_in_tkt(char far*,char far*,char far*,char far*,char far*,int,char far*);
  408. int far dest_tkt(void);
  409. int far krb_get_lrealm(char far*,int);
  410.  
  411. #else
  412.  
  413. /*     DOS prototypes */
  414. krb_get_tf_realm(char*,char*);
  415. krb_get_tf_fullname(char*,char*,char*,char*);
  416. get_ad_tkt(char*,char*,char*,int);
  417. krb_get_cred(char*,char*,char*,CREDENTIALS*);
  418. krb_get_krbhst(char*,char*,int);
  419. krb_get_lrealm(char*,int);
  420. char* krb_get_phost(char*);
  421. krb_mk_req(KTEXT,char*,char*,char*,long);
  422. int krb_set_lifetime(int);
  423. int krb_net_read(int,char*,int);
  424. int krb_net_write(int,char*,int);
  425. KTEXT pkt_cipher(KTEXT);
  426. int pkt_clen(KTEXT);
  427. long krb_rd_priv(u_char*,u_long,Key_schedule,C_Block,struct sockaddr_in*,
  428.                 struct sockaddr_in*,MSG_DAT*);
  429. int save_credentials(char*,char*,char*,C_Block,int,int,KTEXT,long);
  430. int send_to_kdc(KTEXT,KTEXT,char*);
  431. int krb_sendauth(long,int,KTEXT,char*,char*,char*,u_long,
  432.                 MSG_DAT*,CREDENTIALS*,Key_schedule,
  433.                 struct sockaddr_in*,struct sockaddr_in*,char*);
  434. int tf_init(char*,int);
  435. int tf_get_pname(char*);
  436. int tf_get_pinst(char*);
  437. int tf_get_cred(CREDENTIALS*);
  438. int tf_close(void);
  439. int tf_save_cred(char*,char*,char*,C_Block,int,int,KTEXT,long);
  440. int kname_parse(char*,char*,char*,char*);
  441. int krb_get_pw_in_tkt(char*,char*,char*,char*,char*,int,char*);
  442. int dest_tkt(void);
  443. #endif  /* WINDOWS */
  444. #endif    /* KRB_DEFS */
  445.